/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vzone.community;

import java.util.UUID;
import vzone.structs.BasePeople;
import vzone.structs.Housing;
import vzone.structs.OperatorCode;

/**
 *社区操作接口
 * 社区的主要功能是实现登录 管理用户基本信息等
 *
 * @author Kingpro
 */
public interface ICommunity
{
    //step1_Start:实现虚拟社区人员信息的增删改查（注册、登录校验等）
    /**
     * 新用户注册
     * 系统应检查NickName是否重复
     *
     * @param people 新用户信息
     * @param pwdHashS 新用户密码
     * @return 操作码
     */
    public OperatorCode Register(BasePeople people, String pwdHashS);

    /**
     * 用户登录
     * @param NickNameS 用户昵称
     * @param pwdHash 用户密码hash
     * @param people 人对象(返回值)
     * @return 操作码
     */
    public OperatorCode Login(String NickNameS, String pwdHash, BasePeople people);

    /**
     * 修改密码
     * @param peopleIDUuid 用户ID
     * @param oldpwdHashS 旧密码hash
     * @param newpwdHash 新密码hash
     * @return 操作码
     */
    public OperatorCode ChangePwd(UUID peopleIDUuid, String oldpwdHashS, String newpwdHash);

    public OperatorCode ChangePwd(String NickNameS, String oldpwdHashS, String newpwdHash);


    /**
     * 获取用户信息
     * @param peopleID 用户ID
     * @return 用户信息 若不存在则返回null
     */
    public BasePeople GetPeopleInfo(UUID peopleID);

    /**
     * 检查用户是否存在
     * @param peopleID 用户ID
     * @return true表示存在 false表示不存在
     */
    public boolean CheckPeopleInfo(UUID peopleID);

    ///:End of step1
    /*********************************************************************/

    //step2_Start:实现住房信息的管理

    public OperatorCode buyHouse(Housing house ,BasePeople people);

    /**
     * 售房
     * @param house 代售房屋
     * @param sellingPrice 售价
     * @return 操作码
     */
   public OperatorCode sellHouse(Housing house,int sellingPrice);

   /**
    * 出租房屋
    * @param house 待租住房
    * @param rentPrice 租价
    * @param perYear 是否按年租（false 默认按月租）
    * @return 操作码
    */
   public OperatorCode rentHouse(Housing house,int rentPrice,boolean perYear);

    ///:End of step2
    /**********************************************************************/

    //step3_Start:实现物业管理功能（收取相关费用：水电费、停车费等）
     public OperatorCode charge(Charge charge);
   
    ///:End of step3
    /**********************************************************************/

    //step4_Start:增值服务：1、住户保修；2、服务平台（纠纷处理）3、宣传栏管理（对外：设计审核、发布）

    ///:End of step4
    /**********************************************************************/

    //step5_Start:其他

    ///:End of step5
    /**********************************************************************/
}
